const { studentsModel } = require("../models/studentsModels");
const { TOKEN_SECRET } = require("../utils/const");
const jwt = require("jsonwebtoken");
//登录成功操作里

//登录
async function login(req, res, next) {
  // 登录流程 1.先看 用户名是否存在 2.在进行密码与数据库的密码进行匹配
  const { phone, password } = req.body;

  //查询
  //所有的model返回的都是promise异步
  const result = await studentsModel.find({ phone, password });
  // console.log(result);

  // 生成 token
  const token = jwt.sign(
    { user: result[0] }, //  用户信息
    TOKEN_SECRET, // 密钥，任意字符串
    { expiresIn: 3600 } // 设置有效期
  );

  // 判断条件返回
  if (result.length > 0) {
    res.send({
      code: 200,
      message: "登录成功",
      token: "Bearer " + token
    });
  } else {
    res.send({
      code: 500,
      message: "登录失败"
    });
  }
}

// 注册
async function register(req, res, next) {
  const { phone } = req.body;
  let data = req.body;
  // console.log(data);

  // 判断账户是否存在
  let result = await studentsModel.find({ phone });
  // console.log(result);

  // 判断条件返回
  if (result.length == 0) {
    //处理数据库
    studentsModel.create(data);
    //返回客户端信息
    res.send({
      code: 200,
      message: "注册成功"
    });
  } else {
    res.send({
      code: 500,
      message: "注册失败，账号已存在"
    });
  }
}

//获取用户信息
async function getUserInfo(req, res) {
  // 获取请求头中的 token,拆分字符串把之前拼接的去掉
  const token = req.get("Authorization").split(" ")[1];
  // console.log(token);
  // 解码 token
  let { user } = jwt.verify(token, TOKEN_SECRET);

  user = await studentsModel.find({ _id: user._id });
  // console.log(user);
  res.send({
    message: "用户信息获取成功",
    code: 200,
    data: user
  });
}

//修改资料
async function changeStudent(req, res) {
  const { _id, gender, avatar, name } = req.body;

  await studentsModel.updateOne({ _id }, { gender, avatar, name });
  res.send({
    message: "用户信息修改成功",
    code: 200
  });
}

module.exports = {
  login,
  register,
  getUserInfo,
  changeStudent
};
